package ru.stepanovdn.trading.server.strategy

import java.time.Duration

/**
 * Стратегии торговли, зарабатывающие на изменении стоимости торговых инструментов, относительно фиатной валюты
 * Пример: продажа/покупка акций Apple за USD
 */
abstract class AInstrumentByFiatStrategy : AStrategy() {
    override val delayBySL: Duration?
        /**
         * Период паузы в торговле, если продали по stop loss критерию
         * @return
         */
        get() = null

    val historyDuration: Duration
        /**
         * Период истории котировок, для расчета процента (перцентиля) для текущей цены относительно истории
         * @return
         */
        get() = Duration.ofDays(7)


    class BuyCriteria (
        var lessThenPercentile: Int? = null
    )

    abstract val buyCriteria: BuyCriteria?

    class SellCriteria (
        // Процент (stop loss), если цена покупки падает на него, продаем
        var stopLossPercent: Float? = null,

        // Процент (перцентиль), если цена за указанный период падает ниже него, продаем
        var stopLossPercentile: Int? = null,

        // Процент (take profit), если цена покупки растет на него, продаем
        var takeProfitPercent: Float? = null,

        // Процент (take profit, перцентиль), если цена за указанный период растет выше него, продаем
        var takeProfitPercentile: Int? = null,
    )

    abstract val sellCriteria: SellCriteria?

    override val type: Type
        get() = Type.instrumentByFiat
}
